import random
import pandas as pd
import numpy as np

"""
生成【实验报告】成绩
预期成绩为课堂纪律平均分-15分
"""

# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)



def make(file, sheet, loc=75, scale=7, n=5):
    df = pd.read_excel(file, sheet_name=sheet, dtype={
        '序号': 'int',
        '学号': 'str',
        '姓名': 'str',
        '预期均值': 'int'
    })

    df = df[['序号', '学号', '姓名', '课堂纪律']]
    df.sort_values(by='课堂纪律', inplace=True)
    # print(df)

    for i in range(1, 1 + n):
        column = f'第{i}次'

        # 产生原始随机成绩
        arr = np.random.normal(loc, scale, len(df))
        arr = np.floor(arr).astype(int)
        df[column] = np.sort(arr)
        df[column] = df[column].apply(lambda x: 3 * (x // 3))

    df.insert(4, '均值', df.loc[:, '第1次':].mean(axis=1).astype(int))
    df.sort_values(by='序号', inplace=True)

    # 使用ExcelWriter打开一个现有的Excel文件

    with pd.ExcelWriter(file, mode='a', if_sheet_exists='new') as writer:
        df.to_excel(writer, sheet_name='实验报告', index=False)


    # sns.displot(df['均值'])
    # plt.show()
